package utils

import (
	"errors"
	"gitee.com/chejiangyi/bsfgo/core/base2"
)

var ErrorUtil = &ErrorUtilTool{}

type ErrorUtilTool struct{}

func (*ErrorUtilTool) IsBsfError(error error) bool {
	var bsfError *base2.BsfError
	ok := errors.As(error, &bsfError)
	return ok
}

func (*ErrorUtilTool) ConvertToError(err any) error {
	if err == nil {
		return nil
	}
	// 尝试转换为 error 接口类型
	if e, ok := err.(error); ok {
		return e
	} else {
		return nil
	}
}

func (*ErrorUtilTool) AsError(error error, toError any) bool {
	ok := errors.As(error, &toError)
	return ok
}

func (*ErrorUtilTool) TryCatch(try func(), catch func(interface{})) {
	defer func() {
		if err := recover(); err != nil {
			if catch != nil {
				catch(err)
			}
		}
	}()
	try()
}

func (*ErrorUtilTool) Catch(catch func(interface{})) {
	if err := recover(); err != nil {
		if catch != nil {
			catch(err)
		}
	}
}
